/**
 * 
 * 查找字符串數組中最長的前綴
 * 1.首先找到最短的字符串，使用sort的方法
 * 2.根據最短的字符串查找前綴，從一個字符開始
 *  意外情況分別為：
 *      數組小於2
 *      出現不一樣相同的短字符,所以每一項都需要查證。eg.['a','a','b','ab'] ,使用全部查證，
 *      在查證完前兩個最短字符串后查证是否所有的prefix相同，如若不同则返回空，['ab','abc','acd'] 取巧的办法会漏掉部分情况
 *      数组sort默认是按照比对每位的字母大小顺序排序的，故而需要重新设定排序规则
 * @param {any} strs 
 * @returns 
 */

/**
 * @param {string[]} strs
 * @return {string}
 */
function longestCommonPrefix(strs) {
    if (strs.length < 2) {
        return strs[0] ? strs[0] : "";
    }
    strs.sort((a, b) => a.length > b.length)
    //先找最小的长度字符串
    var min = Math.min(strs[0].length, strs[1].length)

    var prefix = 0
    for (let i = 1; i <= min; i++) {
        var pre_str = strs[0].substring(0, i)
        var isPre = strs.every(str => str.indexOf(pre_str) === 0)
        if (isPre) {
            prefix = i

        } else { break }
    }
    return strs[0].substring(0, prefix)
}

//2 ['ab','abc','acd'] 取巧的办法会漏掉部分情况，所以第一种最全面考虑。在某些情况下更优
function longestCommonPrefix(strs) {
    if (strs.length < 2) {
        return strs[0] ? strs[0] : "";
    }
    strs.sort((a, b) => a.length > b.length)
    //先找最小的长度字符串
    var min = Math.min(strs[0].length, strs[1].length)

    var prefix = 0
    for (let i = 0; i < min; i++) {
        console.log(strs[0].charAt(i), strs[1].charAt(i))
        if (strs[0].charAt(i) !== strs[1].charAt(i)) {
            break
        }
        prefix = i + 1
    }

    var pre_str = strs[0].substring(0, prefix)
    var isPre = strs.every(str => str.indexOf(pre_str) === 0)

    return isPre ? pre_str : ''
}